home *** CD-ROM | disk | FTP | other *** search
- #include "mylib.h"
- #include "rational.h"
-
- rational rational::operator-()
- {
- rational result(*this);
- result.num = -result.num;
- return result;
- }
-
- rational operator++(rational &r, int)
- {
- rational result(r);
- r += 1;
- return result;
- }
-
- rational operator--(rational &r, int)
- {
- rational result(r);
- r -= 1;
- return result;
- }
-
- rational &rational::operator+=(rational r)
- {
- num = num * r.denom + r.num * denom;
- denom *= r.denom;
- simplify();
- return *this;
- }
-
- rational &rational::operator-=(rational r)
- {
- num = num * r.denom - r.num * denom;
- denom *= r.denom;
- simplify();
- return *this;
- }
-
- rational &rational::operator*=(rational r)
- {
- num *= r.num;
- denom *= r.denom;
- simplify();
- return *this;
- }
-
- rational &rational::operator/=(rational r)
- {
- num *= r.denom;
- denom *= r.num;
- simplify();
- return *this;
- }
-
- ostream &operator<<(ostream &os, rational r)
- {
- return os << '(' << r.num << '/' << r.denom << ')';
- }
-
- istream &operator>>(istream &is, rational &r)
- {
- long n, d;
- char c = 0;
- if (is >> c && c == '(')
- {
- is >> n >> c;
- if (c == '/')
- is >> d >> c;
- if (c != ')')
- {
- is.putback(c);
- is.clear(ios::failbit);
- }
- }
- else
- {
- is.putback(c);
- is >> n;
- d = 1;
- }
- if (is)
- r = rational(n, d);
- return is;
- }
-
- void rational::simplify()
- {
- long x = gcd(num, denom);
- num /= x;
- denom /= x;
- }
-
-